UniformXyDataSeries is a DataSeries type in SciChart that doesn’t require X-Values. Instead, X positions are calculated based on XStart and XStep properties. This gives UniformXyDataSeries an advantage over other DataSeries types in terms of allocated memory and data processing speed. From usage perspective, UniformXyDataSeries is beneficial when X values are equidistant.
Creation
There are various ways to create UniformXyDataSeries:
Creating UniformXyDataSeries |
Copy Code |
---|---|
// Create a UniformXyDataSeries and initialize it with XStart, XStep var uniformDataSeries = new UniformXyDataSeries<double>() { XStart = -100, XStep = 1.5 }; // Create a UniformXyDataSeries and initialize it with array of YValues var yValues = new double[] { -21, 3.6, -10, 13.3}; uniformDataSeries = new UniformXyDataSeries<double>(yValues); |
To achieve the most optimal performance, additional info about data can be provided in constructors as DataDistributionParams. There are two options possible: foreknowledge of data peaks (if data contains frequent, repetitive peaks) or whether NaN values are expected:
DataDistributionParams constructor |
Copy Code |
---|---|
// Create DataDistributionArgs which declare that NaN values are expected and frequent data peaks are 0 and 1 var dataDistributionArgs = new UniformDataDistributionArgs<double>(true, 0, 1); // Create a UniformXyDataSeries with initial Capacity and DataDistributionArgs var uniformDataSeries = new UniformXyDataSeries<double>(1_000_000, dataDistributionArgs); |
Providing DataDistributionParams can have huge impact on performance, so DataDistributionParams should be used whenever possible.
PointMetadata
It is possible to provide a list of PointMetadata for every data point in UniformXyDataSeries. PointMetadata can be used to change rendering of certain data points via PaletteProviders, to show additional info in Tooltips, etc.
PointMetadata |
Copy Code |
---|---|
// Create a UniformXyDataSeries and initialize it with array of YValues and PointMetadata yValues = new double[] { -21, 3.6, -10, 13.3 }; var metadata = new IPointMetadata[yValues.Length]; var uniformDataSeries = new UniformXyDataSeries<double>(yValues, metadata); |
Updating
UniformXyDataSeries API provides a bunch of methods that can be used to append or insert new data, update or remove some data points in existing data set:
Editing data points in existing data set |
Copy Code |
---|---|
// Append a collection of Y-Values to the existing data set uniformDataSeries.Append(yValuesCollection); // Update Y-Value at given index uniformDataSeries.Update(15, 145d); // Remove range of N elements starting at given index uniformDataSeries.RemoveRange(0, 10); // Reset UniformXyDataSeries to a new Y-Values collection uniformDataSeries.Reset(yValuesCollection); // Clear Y-Values uniformDataSeries.Clear(); |
Such operations, when occur, trigger DataSeriesChanged event. It can be used to listen to data changes and receive more detailed information about the changes.
FIFO Mode
It is possible to fill UniformXyDataSeries in FIFO manner. Setting FifoCapacity on UniformXyDataSeries enables this mode. When in FIFO mode, old data points are removed from the beginning of the data set when new ones are added:
Creating UniformXyDataSeries |
Copy Code |
---|---|
// Create a UniformXyDataSeries as FIFO (circular) buffer. // Initialize it with XStart, XStep and FIFO capacity var uniformDataSeries = new UniformXyDataSeries<double>() { XStart = -100, XStep = 1.5 FifoCapacity = 5000 }; |
Data Filters
It is possible to filter data in UniformXyDataSeries and create a new UniformXyDataSeries with filtered results. It can be done using Data Filters API. Supported filters allows Scaling, Offsetting, finding Simple Moving Average series, Linear and Polynomial Trendlines and creating Splines:
using Data Filters API |
Copy Code |
---|---|
// Scales every data point by ScaleFactor and returns new UniformXyDataSeries var scaledDataSeries = uniformDataSeries.Scale(1.5); // Offsets every data point by Offset and returns new UniformXyDataSeries var offsetDataSeries = uniformDataSeries.Offset(15); // Returns a new UniformXyDataSeries containing simple MovingAverage of N points var movingAverage = uniformDataSeries.ToMovingAverage(50); var offsetDataSeries = uniformDataSeries.Offset(15); |
Limitations
There are certain limitations that apply to usage of UniformXyDataSeries:
- XStart and XStep properties accept Double values only
- UniformXyDataSeries cannot be used with FastMountainRenderableSeries and StackedMountainRenderableSeries
- Only NumericAxis types can render UniformXyDataSeries, except LogarithmicNumericAxis and NegativeLogarithmicNumericAxis
- CategoryNumericAxis doesn’t support UniformXyDataSeries in FIFO mode